#pragma once
#include <stdbool.h>
#include <stdlib.h>
#include <assert.h>
typedef int QueueDataType;
typedef struct ListNode
{
	struct ListNode* next;
	QueueDataType val;

}Node;

typedef struct Queue
{
	Node* head;
	Node* tail;
	int size;
}Queue;

Node* CreateNode();
void QueueInit(Queue* q);
void QueueDestroy(Queue* q);
bool QueuePush(Queue* q, QueueDataType x);
bool QueuePop(Queue* q);
int QueueSize(Queue* q);
bool QueueEmpty(Queue* q);
QueueDataType QueueFront(Queue* q);
QueueDataType QueueBack(Queue* q);